<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // Promise的特征
    // (1) 对象的状态不受外界影响。Promise对象代表一个异步操作，有三种状态：pending（进行中）、fulfilled（已成功）和rejected（已失败）。只有异步操作的结果，可以决定当前是哪一种状态，任何其他操作都无法改变这个状态。 => 用户根据异步操作的结果决定调用 resolve() reject() 改变状态

    // (2) 一旦状态改变，就不会再变，任何时候都可以得到这个结果。Promise对象的状态改变，只有两种可能：从pending变为fulfilled和从pending变为rejected。只要这两种情况发生，状态就凝固了，不会再变了，会一直保持这个结果，这时就称为 resolved（已定型）

    // 注意，为了行文方便，本章后面的resolved统一只指fulfilled状态，不包含rejected状态。


    //   debugger;
    // console.log(1);
    // var p = new Promise(function(resolve,reject){
    //     //  回调函数 => 容器 => 用于存放要执行的代码(通常是异步代码,同步也可以)
    //     // 当前函数数据同步任务 -> new Promise() 传入函数时立即执行
    //     console.log(2);
    //     setTimeout(()=>{
    //         // debugger;
    //         console.log(4,"异步代码开始执行");
    //         var num = Math.random(); // 0-1
    //         console.log(num);

    //         if(num >= 0.5){ // 正面
    //             resolve("老王不拖堂");
    //         }else{
    //             reject("老王说,该拖还要拖");
    //         }
    //         console.log(p);
    //     },2000)
    // });
    // console.log(3);
    // console.log(p);   // {<pending>:undefined}

    // var p = new Promise(function(resolve,reject){
    //     //  回调函数 => 容器 => 用于存放要执行的代码(通常是异步代码,同步也可以)
    //     // 当前函数数据同步任务 -> new Promise() 传入函数时立即执行
    //     reject(0);
    //     resolve(1);  // {<fulfilled>:1}
    // });
    // console.log(p);  

</script>
</html>